package it.heima.xmy.demo;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class DisCopyTest {
    public static void main(String[] args) throws IOException {
        //获取源文件
        File file = new File("F:\\qwe\\asd");
        //获取目标地
        File file1 = new File("F:\\qwe\\1a");
        //调用方法
        copyDir(file, file1);
    }

    private static void copyDir(File file, File file1) throws IOException {
        //如果目标文件夹不存在进行创建
        file1.mkdirs();
        //1.获取源文件
        /*难点 在于目标文件的文件命名要和需要拷贝的文件名字一致,且源文件中的文件不能直接拷贝到目标文件夹中，
        应该拷贝到一一对应的文件夹中，所以需要得到源文件中的文件名，把目标文件作为父路径，源文件名当作子路径*/
        //2.进入源文件的子级文件夹
        File[] files = file.listFiles();
        //3.遍历子级文件
        for (File file2 : files) {
            //4.判断是否是文件,是文件直接拷贝
            if (file2.isFile()) {
                /*只有是文件的时候才能对这个文件进行创建字节输入和字节输出流对象进行拷贝操作*/
                FileInputStream fis = new FileInputStream(file2);
                FileOutputStream fos = new FileOutputStream(new File(file1, file2.getName()));
                byte[] bytes = new byte[1024];
                int len;
                while ((len = fis.read(bytes)) != -1) {
                    fos.write(bytes, 0, len);
                }
                fos.close();
                fis.close();
            } //5.否则递归
            else {
                copyDir(file2, new File(file1, file2.getName()));
            }
        }
    }
}
